001    /**
002     * Created by IntelliJ IDEA.
003     * User: Wei Wang
004     * Date: Dec 4, 2002
005     * Time: 8:51:17 PM
006     */
007    
008    package EVolve.visualization.XYViz.ValValViz;
009    
010    import EVolve.visualization.*;
011    import EVolve.visualization.Dimension;
012    import EVolve.data.Element;
013    import EVolve.Scene;
014    
015    import javax.swing.*;
016    import java.awt.event.*;
017    import java.awt.*;
018    
019    public class MetricViz extends ValueValueVisualization{
020        private JMenuItem itemSelectTimeFrame;
021        private JTextField textIntervalX, textIntervalY;
022        private int intervalY;
023    
024        public MetricViz() {
025            super();
026            interval = 1;
027            intervalY = 1000000;
028        }
029    
030        public Dimension[] createDimension() {
031            Dimension[] returnVal = new Dimension[2];
032            xAxis = new ValueDimension();
033            yAxis = new ValueDimension();
034    
035            returnVal[0] = xAxis;
036            returnVal[1] = yAxis;
037    
038            return returnVal;
039        }
040    
041        public JMenuItem[] createSelectionMenuItem() {
042            itemSelectTimeFrame = new JCheckBoxMenuItem("Time Frame");
043            itemSelectTimeFrame.setMnemonic(KeyEvent.VK_T);
044            itemSelectTimeFrame.setSelected(true);
045            itemSelectTimeFrame.setEnabled(false);
046    
047    
048            JMenuItem[] items = new JMenuItem[1];
049            items[0] = itemSelectTimeFrame;
050    
051            return items;
052        }
053    
054        protected JPanel createConfigurationPanel() {
055            JPanel configurationPanel = new JPanel(new GridLayout(2, 1, 5, 5));
056    
057            JPanel panelIntervalX = new JPanel(new FlowLayout());
058            panelIntervalX.add(new JLabel("Interval X: "));
059    
060            textIntervalX = new JTextField(String.valueOf(interval), 10);
061            panelIntervalX.add(textIntervalX);
062    
063            JPanel panelIntervalY = new JPanel(new FlowLayout());
064            panelIntervalY.add(new JLabel("Interval Y: "));
065    
066            textIntervalY = new JTextField(String.valueOf(intervalY), 10);
067            panelIntervalY.add(textIntervalY);
068    
069            configurationPanel.add(panelIntervalX);
070            configurationPanel.add(panelIntervalY);
071    
072            return configurationPanel;
073        }
074    
075        protected void updateConfiguration() {
076            try {
077                if (autoInterval != -1) {
078                    interval = autoInterval;
079                    autoInterval = -1;
080                } else {
081                    interval = Integer.parseInt(textIntervalX.getText());
082                    intervalY = Integer.parseInt(textIntervalY.getText());
083                }
084    
085                super.updateConfiguration();
086                canvas.setName("Bytecode", "Miss rate");
087            } catch (NumberFormatException e) {
088                Scene.showErrorMessage("Interval must be an integer");
089                configure();
090            }
091        }
092    
093    
094        public void preVisualize() {
095            super.preVisualize();
096            image = new AutoImage();
097            installPainter();
098        }
099    
100        public void receiveElement(Element element) {
101            if (element.isOptional()) return;
102    
103            long x = xAxis.getField(element);
104            long y = yAxis.getField(element);
105    
106            if (xOffset == -1) xOffset = x;
107    
108            painter.paint(image,(x-xOffset)/interval,y/intervalY,0);
109        }
110    
111        public void visualize() {
112            sort();
113        }
114    
115        public void mouseMove(int x, int y) {
116    
117        }
118    
119        public void makeSelection() { // nothing to be selected in this viz
120        }
121    
122        public Object clone() {
123            MetricViz o = (MetricViz)super.clone();
124            o.dimension[0] = o.xAxis;
125            o.dimension[1] = o.yAxis;
126    
127            return o;
128        }
129    }